//如果没有定义start则立即执行f，否则在start毫秒之后执行f；
//如果没有定义end，则之后重复每隔interval毫秒之后执行f，
//否则end毫秒之后停止执行f。
function invoke(f,start,interval,end){
	var arg = arguments[4];
	if(!start) start = 0;
	if(arguments.length <= 2)
		setTimeout(f,start,arg);
	else{
		function repeat(){
			var h = setInterval(f,interval,arg);
			if(end)
				setTimeout(function(){clearInterval(h);},end);
		}
		setTimeout(repeat,start);
	}
}

//带参数版的invoke
function invoke_with_arg(f,arg,start,interval,end){
	invoke(f,start,interval,end,arg);
}